package com.kickstarter.ui.compose.designsystem

import androidx.compose.runtime.Immutable
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp

@Immutable
data class KSDimensions(
    val strokeWidth: Dp = Dp.Unspecified,
    val dividerThickness: Dp = Dp.Unspecified,
    val none: Dp = 0.dp,
    val paddingXSmall: Dp = Dp.Unspecified,
    val paddingSmall: Dp = Dp.Unspecified,
    val paddingMediumSmall: Dp = Dp.Unspecified,
    val paddingMedium: Dp = Dp.Unspecified,
    val paddingMediumLarge: Dp = Dp.Unspecified,
    val paddingLarge: Dp = Dp.Unspecified,
    val paddingXLarge: Dp = Dp.Unspecified,
    val paddingXXLarge: Dp = Dp.Unspecified,
    val paddingDoubleLarge: Dp = Dp.Unspecified,
    val paddingTripleLarge: Dp = Dp.Unspecified,
    val minButtonHeight: Dp = Dp.Unspecified,
    val stepperHeight: Dp = Dp.Unspecified,
    val stepperWidth: Dp = Dp.Unspecified,
    val stepperButtonWidth: Dp = Dp.Unspecified,
    val footerHeight: Dp = Dp.Unspecified,
    val borderThickness: Dp = Dp.Unspecified,
    val listItemSpacingSmall: Dp = Dp.Unspecified,
    val listItemSpacingMediumSmall: Dp = Dp.Unspecified,
    val listItemSpacingMedium: Dp = Dp.Unspecified,
    val listItemSpacingLarge: Dp = Dp.Unspecified,
    val radiusExtraSmall: Dp = Dp.Unspecified,
    val radiusSmall: Dp = Dp.Unspecified,
    val radiusMediumSmall: Dp = Dp.Unspecified,
    val radiusMedium: Dp = Dp.Unspecified,
    val radiusMediumLarge: Dp = Dp.Unspecified,
    val radiusLarge: Dp = Dp.Unspecified,
    val textInputTopPadding: Dp = Dp.Unspecified,
    val dropDownStandardWidth: Dp = Dp.Unspecified,
    val dropDownMenuImageSize: Dp = Dp.Unspecified,
    val imageSizeMedium: Dp = Dp.Unspecified,
    val imageSizeLarge: Dp = Dp.Unspecified,
    val dialogWidth: Dp = Dp.Unspecified,
    val dialogButtonSpacing: Dp = Dp.Unspecified,
    val elevationMedium: Dp = Dp.Unspecified,
    val elevationLarge: Dp = Dp.Unspecified,
    val assistiveTextTopSpacing: Dp = Dp.Unspecified,
    val verticalDividerWidth: Dp = Dp.Unspecified,
    val iconSizeMedium: Dp = Dp.Unspecified,
    val iconSizeLarge: Dp = Dp.Unspecified,
    val featuredSearchImageHeight: Dp = Dp.Unspecified,
    val projectSearchImageHeight: Dp = Dp.Unspecified,
    val projectSearchImageWidth: Dp = Dp.Unspecified,
    val searchAppBarHeight: Dp = Dp.Unspecified,
    val appBarEndPadding: Dp = Dp.Unspecified,
    val appBarSearchPadding: Dp = Dp.Unspecified,
    val clickableButtonHeight: Dp = Dp.Unspecified,
    val dottedListDotSize: Dp = Dp.Unspecified,
    val countryInputWidth: Dp = Dp.Unspecified,
    val storedCardImageHeight: Dp = Dp.Unspecified,
    val storedCardImageWidth: Dp = Dp.Unspecified,
    val alertIconSize: Dp = Dp.Unspecified,
    val plotChargeItemWidth: Dp = Dp.Unspecified,
    val cardWidth: Dp = Dp.Unspecified,
    val cardImageHeight: Dp = Dp.Unspecified,
    val rewardCardImageAspectRatio: Float = Float.NaN,
    val loadingSpinnerSize: Dp = Dp.Unspecified,
    val pillButtonShapeSize: Dp = Dp.Unspecified,
    val iconPillButtonSize: Dp = Dp.Unspecified,
    val iconPillButtonSizeLarge: Dp = Dp.Unspecified,
    val linearProgressBarHeight: Dp = Dp.Unspecified,
    val smallProjectCardImageHeight: Dp = Dp.Unspecified,
    val projectCardImageAspectRatio: Float = Float.NaN,
    val searchBottomSheetFooter: Dp = Dp.Unspecified,
    val activityFeedProjectImageWidth: Dp = Dp.Unspecified,
    val activityFeedProjectImageHeight: Dp = Dp.Unspecified,
    val bottomSheetMinHeight: Dp = Dp.Unspecified,
    val bottomSheetMaxHeight: Dp = Dp.Unspecified,
    val secretRewardBadgeOffsetY: Dp = Dp.Unspecified,
    val paddingXXXLarge: Dp = Dp.Unspecified,
)

val LocalKSCustomDimensions = staticCompositionLocalOf {
    KSDimensions()
}

val KSStandardDimensions = KSDimensions(
    strokeWidth = 2.dp,
    dividerThickness = 1.dp,
    paddingXSmall = 4.dp,
    paddingSmall = 8.dp,
    paddingMediumSmall = 12.dp,
    paddingMedium = 16.dp,
    paddingMediumLarge = 18.dp,
    paddingLarge = 24.dp,
    paddingXLarge = 32.dp,
    paddingXXLarge = 40.dp,
    paddingXXXLarge = 42.dp,
    paddingDoubleLarge = 48.dp,
    paddingTripleLarge = 72.dp,
    minButtonHeight = 40.dp,
    stepperHeight = 36.dp,
    stepperWidth = 108.dp,
    stepperButtonWidth = 54.dp,
    footerHeight = 132.dp,
    borderThickness = 1.dp,
    listItemSpacingSmall = 8.dp,
    listItemSpacingMediumSmall = 12.dp,
    listItemSpacingMedium = 16.dp,
    listItemSpacingLarge = 24.dp,
    radiusExtraSmall = 4.dp,
    radiusSmall = 6.dp,
    radiusMediumSmall = 9.dp,
    radiusMedium = 12.dp,
    radiusMediumLarge = 16.dp,
    radiusLarge = 18.dp,
    textInputTopPadding = 6.dp,
    dropDownStandardWidth = 150.dp,
    dropDownMenuImageSize = 12.dp,
    imageSizeMedium = 24.dp,
    imageSizeLarge = 32.dp,
    dialogWidth = 328.dp,
    dialogButtonSpacing = 2.dp,
    elevationMedium = 8.dp,
    elevationLarge = 16.dp,
    assistiveTextTopSpacing = 6.dp,
    verticalDividerWidth = 4.dp,
    iconSizeMedium = 18.dp,
    iconSizeLarge = 24.dp,
    featuredSearchImageHeight = 200.dp,
    projectSearchImageHeight = 45.dp,
    projectSearchImageWidth = 80.dp,
    searchAppBarHeight = 68.dp,
    appBarEndPadding = 12.dp,
    appBarSearchPadding = 6.dp,
    clickableButtonHeight = 48.dp,
    dottedListDotSize = 2.dp,
    countryInputWidth = 164.dp,
    storedCardImageHeight = 40.dp,
    storedCardImageWidth = 64.dp,
    alertIconSize = 14.dp,
    plotChargeItemWidth = 100.dp,
    cardWidth = 294.dp,
    cardImageHeight = 196.dp,
    loadingSpinnerSize = 24.dp,
    pillButtonShapeSize = 100.dp,
    iconPillButtonSize = 40.dp,
    iconPillButtonSizeLarge = 70.dp,
    rewardCardImageAspectRatio = 3f / 2f,
    linearProgressBarHeight = 9.dp,
    smallProjectCardImageHeight = 72.dp,
    projectCardImageAspectRatio = 16f / 9f,
    searchBottomSheetFooter = 88.dp,
    activityFeedProjectImageWidth = 96.dp,
    activityFeedProjectImageHeight = 54.dp,
    bottomSheetMinHeight = 200.dp,
    bottomSheetMaxHeight = 770.dp,
    secretRewardBadgeOffsetY = 14.dp

)
